﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include<assert.h>
//一个数组中只有两个数字是出现一次，其他所有数字都出现了两次。
//编写一个函数找出这两个只出现一次的数字。
//例如：有数组的元素是：1，2，3，4，5，1，2，3，4，6 只有5和6只出现1次，要找出5和6.
//模拟strncpy
#include <stdio.h>
#include <assert.h>

//char* my_strncpy(char* str1, const char* str2, size_t num)
//{
//	assert(str1 && str2);
//	char* ret = str1;
//	while (num--)
//	{
//		*str1++ = *str2++;
//	}
//	return ret;
//}
//int main()
//{
//	char arr1[] = "abcdef";
//	char arr2[] = "defabc";
//	printf("请输入拷贝的字符串长度:>");
//	size_t len = 0;
//	scanf("%zd", &len);
//	printf("%s\n", my_strncpy(arr1, arr2, len));
//	return 0;
//}

//int main()
//{
//    int arr[] = { 1,2,3,4,5,1,2,3,4,6 };
//    int sum = 0;
//    int sz = sizeof(arr) / sizeof(arr[0]);
//
//    for (int i = 0; i < sz; i++)
//    {
//        sum ^= arr[i];
//    }
//
//    int pos;
//    for (int i = 0; i < 32; i++)
//    {
//        if (sum & 1 << i)
//        {
//            pos = i;
//            break;
//        }
//    }
//
//    int dog1 = 0, dog2 = 0;
//    for (int i = 0; i < sz; i++)
//    {
//        if (arr[i] & 1 << pos)
//            dog1 ^= arr[i];
//        else
//            dog2 ^= arr[i];
//    }
//    printf("第一个单身狗%d\n第二个单身狗%d", dog1, dog2);
//    return 0;
//}
//void GetMemory(char** p)
//{
//	 *p = (char**)malloc(100);
//}
//void Test(void)
//{
//	char* str = NULL;
//	GetMemory(&str);
//	strcpy(str, "hello world");
//	printf(str);
//	free(str);
//	str = NULL;
//}
//int main()
//{
//	Test();
//	return 0;
//
//}
//void test()
//{
//	int* p = (int*)malloc(100);
//
//	if (NULL != p)
//	{
//		*p = 20;
//	}
//}
//
//int main()
//{
//	test();
//	return 0;
//}
//int main()
//{
//	int* p = (int*)malloc(40);
//	if (p == NULL)
//	{
//		perror("malloc");
//		return;
//	}
//	//初始化
//	for (int i = 0; i < 10; i++)
//	{
//		p[i] = i;
//	}
//	int* ptr = (int*)realloc(p, 60);
//	if (ptr != NULL)
//	{
//		p = ptr;
//	}
//	else
//	{
//		perror("realloc");
//		return;
//	}
//	for (int i = 0; i < 20; i++)
//	{
//		printf("%d ", p[i]);
//	}
//	free(p);
//	p = NULL;
//	return 0;
//}
//int main()
//{
//	int* ptr = (int*)calloc(10 , sizeof(int));
//	if (ptr == NULL)
//	{ 
//		perror("calloc");
//		return;
//	}
//	//打印数据
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d ", ptr[i]);
//	}
//	free(ptr);
//	ptr = NULL;
//	return 0;
//}
//int main()
//{
//	
//	int* ptr = (int*)malloc(10 * sizeof(int));
//	if (ptr != NULL)//判断ptr是否为空指针
//	{
//		int i = 0;
//		for (i = 0; i <= 10; i++)//越界访问
//		{
//			*(ptr + 1) = i;
//		}
//	}
//	else
//	{
//		perror("malloc");
//		return;
//	}
//	free(ptr);//释放掉ptr所指向的动态内存
//	ptr = NULL;//释放完置空是好习惯！
//	return 0;
//}